#ifndef GST_MOMAPROPERTYDESC_H
#define GST_MOMAPROPERTYDESC_H

#include <buildspec.h>
#include <config.h>	
#include <Geometry/IGeometry.h>
#include <Client/ClientUtils/MoMaStructs.h>

#include <boost/shared_ptr.hpp>

#include <string>
#include <vector>

using GST::ClientUtils::Owner;
using GST::ClientUtils::OwnerPtr;

namespace GST {
	namespace ClientUtils {

class GST_API_EXPORT MoMaPropertyDesc
{
public:
	typedef long PROPERTYID;

private:
	TableAttributeDesc::DType dtype;
	std::string propertyname;
	OwnerPtr owner;
	PROPERTYID propertyid;

public:
	MoMaPropertyDesc(void);
	MoMaPropertyDesc(const std::string& _name, TableAttributeDesc::DType _dtype, OwnerPtr _owner, MoMaPropertyDesc::PROPERTYID _id=-1);
	MoMaPropertyDesc(const MoMaPropertyDesc& other);
	TableAttributeDesc::DType getDType() const;
	std::string getDTypeAsString() const;
	PROPERTYID getMoMaPropertryID() const;
	OwnerPtr getOwner() const;
	static std::string MoMaPropertyType2Str( const TableAttributeDesc::DType & type ) ;
	static TableAttributeDesc::DType MoMaPropertyType2DType( const std::string  & type ) ;
	void setMoMaPropertyID(MoMaPropertyDesc::PROPERTYID _id);
	std::string getMoMaPropertyName() const;
	void setMoMaPropertyName(std::string& newname);
	~MoMaPropertyDesc(void);
	bool operator ==(const MoMaPropertyDesc& other) const;
};

typedef boost::shared_ptr<MoMaPropertyDesc> MoMaPropertyDescPtr;
typedef std::vector<MoMaPropertyDescPtr> MoMaPropertyDescList;
typedef boost::shared_ptr<MoMaPropertyDescList> MoMaPropertyDescListPtr;




	}//namespace ClientUtils 
}// namespace GST

#endif // GST_MOMAPROPERTYDESC_H
